﻿using System.Security.Cryptography;
using System.Text;

namespace DoNet.Platform.JD
{
    public class JDCommon
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="appKey"></param>
        /// <param name="accessToken"></param>
        /// <param name="appSecret"></param>
        /// <param name="method"></param>
        /// <param name="timestamp"></param>
        /// <param name="version"></param>
        /// <param name="paramJson"></param>
        /// <returns></returns>
        public static string GenerateSign(string appKey, string accessToken, string appSecret, string method, string timestamp, string version, string paramJson)
        {
            /*
            2. 工具使用方法：
            2.1. 按字段输入
            1） access_token: 如果使用授权接口必须添加token，接口是否为授权可以在接口文档-->接口名称下进行查看。
            2） app_secret：填写应用的秘钥，可以在控制台-->应用管理中查看秘钥
            3） appkey：填写应用的秘钥，可以在控制台-->应用管理中查看appkey
            4） method：输入您想要调用的接口名称
            5） timestamp：时间戳，格式为yyyy-MM-dd HH:mm:ss，例如：2011-06-16 13:23:30。京东API服务端允许客户端请求时间误差为10分钟
            6)  360buy_param_json：一个封装了所有的入参的json串，以实际接口入参为准
            7)  V：接口的版本，可以在接口文档中查看接口的版本 
            */
            var content = string.Concat("access_token", accessToken, "app_secret", appSecret, "app_key", appKey, "method", method, "param_json", paramJson, "timestamp", timestamp, "v", version);
            return Sign(content);
        }
        public static string Sign(string signStr)
        {
            // 第三步：使用MD5加密
            using (MD5 md5 = MD5.Create())
            {
                byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(signStr));

                // 第四步：把二进制转化为大写的十六进制
                StringBuilder result = new StringBuilder();
                for (int i = 0; i < bytes.Length; i++)
                {
                    result.Append(bytes[i].ToString("X2"));
                }
                return result.ToString();
            }
        }
    }
}
